package com.cmii.sjw.department.control.common;

import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;

import java.beans.PropertyDescriptor;
import java.util.concurrent.TimeUnit;

/**
 * 缓存类的属性描述
 *
 * @author <a href="mailto:tanghaotian@alu.uestc.edu.cn" rel="nofollow">cddysq</a>
 * @version 1.0.0
 * @date 2024/6/13 9:43
 * @since 1.0.0
 **/
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class PropertyDescriptorCache {
    /**
     * 缓存的键为类，值为属性描述符数组
     */
    private static final Cache<Class<?>, PropertyDescriptor[]> CACHE = Caffeine.newBuilder()
            // 设置缓存过期时间为10分钟
            .expireAfterAccess(10, TimeUnit.MINUTES)
            // 设置缓存的最大条目数
            .maximumSize(100)
            .build();

    /**
     * 获取类的属性描述符数组
     *
     * @param clazz 要获取属性描述符的类
     * @return 属性描述符数组
     */
    public static PropertyDescriptor[] getPropertyDescriptors(Class<?> clazz) {
        return CACHE.get(clazz, BeanUtils::getPropertyDescriptors);
    }
}
